import json


class Student:
    #学号
    sid = 0
    #姓名
    name = ""
    #年龄
    age = 0
    #居住地
    addr = ""

    def setSid(self,sid):
        """设置学号"""
        self.sid = sid
    def setName(self,name):
        """设置姓名"""
        self.name = name
    def setAge(self, age):
        """设置年龄"""
        self.age = age
    def setAddress(self, address):
        """设置地址"""
        self.addr = address



class StudentManager:

    def __init__(self):
        self.array = set()
        self.openFile()

    def writerFile(self):
        #写入文件信息
        if self.array:
            with open('./data/学生.json','w',encoding='utf-8') as f:
                result = []
                for i in self.array:
                    res = {
                        "name":i.name,
                        "sid":i.sid,
                        "age":i.age,
                        "addr":i.addr
                    }
                    result.append(res)
                f.write(json.dumps(result, ensure_ascii=False))
        else:
            print('array集合中没有学生信息!')

    def openFile(self):
        # 打开本地数据文件
        with open('./data/学生.json', 'r', encoding='utf-8') as f:
            res = f.read()
            if self.array:
                self.array.clear()
            if res:
                data_list = json.loads(res)

                for i in data_list:
                    student = Student()
                    student.setSid(i['sid'])
                    student.setName(i['name'])
                    student.setAge(i['age'])
                    student.setAddress(i['addr'])
                    # 将学生信息保存到set集合
                    self.array.add(student)

    def addStudent(self):

        student = Student()
        sid = input('请输入学生学号:')
        name = input('请输入学生姓名:')
        age = input('请输入学生年龄:')
        addr = input('请输入学生居住地:')
        # 设置学生信息

        student.setSid(sid)
        student.setName(name)
        student.setAge(age)
        student.setAddress(addr)
        #将学生信息保存到set集合
        self.array.add(student)
        print('添加学生成功！')
        print()


    def findAllStudent(self):
        """ 查询所有学生 """
        if not self.array:
            print('无信息，请先添加信息后在查询！')
            return
        #遍历输出打印学生信息
        print('学号\t\t姓名\t\t年龄\t\t居住地')
        for i in self.array:
            print(i.sid + '\t\t' + i.name + '\t\t' + i.age + '岁\t' + i.addr)
        print()

    def deleteStudent(self):
        #循环删除
            sid = input("请输入你要删除的学生的学号：")
            if self.array: # 判断是否有学生信息
                for i in self.array:  # 遍历学生信息
                    if i.sid == sid:  # 判断输入的学号和保存的学生学号是否一致
                        self.array.remove(i)  # 删除此学生对象
                        print('学号:{} 姓名:{} 的学生删除成功！'.format(i.sid, i.name))
                        print()
                        return
                else:
                    print('没有此学生学号，请重新输入!')
            else:
                print('无信息，请先添加信息后在查询！')
                return

    def updateStudent(self):
        """ 修改学生信息 """
        if self.array:   #判断是否有学生信息
            sid = input('请输入你要修改的学生学号：')
            for i in self.array:  # 遍历学生信息
                if i.sid == sid:
                    student = Student()  #创建一个学生对象
                    student.sid = sid
                    student.setName = input('请输入学生新姓名:')
                    student.setAge = input('请输入学生新年龄:')
                    student.setAddress = input('请输入学生新居住地:')
                    self.array.remove(i)  # 删除当前对象
                    self.array.add(student) #将对象添加到集合
                    print('修改学生成功！')
                    print()
                    return
            else:
                print('未找寻到此学生学号，请输入正确学号!')
        else:
            print('无信息，请先添加信息后在查询！')
            return


    def run(self):
        while True:
            print()
            print()
            print()
            print('-'*10, '欢迎来到学生管理系统','-'*10)
            print('1 添加学生')
            print('2 删除学生')
            print('3 修改学生')
            print('4 查看所有学生')
            print('5 退出')
            print('请输入数字编号，如输入其他字符则直接退出')
            sc = input('请输入你的选择：')

            if sc == '1':
                print()
                print('添加学生')
                self.addStudent()
            elif sc == '2':
                print()
                print('删除学生')
                self.deleteStudent()
            elif sc == '3':
                print()
                print('修改学生')
                self.updateStudent()
            elif sc == '4':
                print()
                print('查看所有学生')
                self.findAllStudent()
            else:
                self.writerFile()
                print('谢谢使用，已退出')
                break



sm = StudentManager()
sm.run()